home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 4 / Light ROM 4 - Disc 1.iso / text / maillist / 1995 / 121595.doc / 000016_lightwave@garcia.com _Fri Dec 15 01:54:39 1995.msg < prev    next >
Internet Message Format  |  1996-01-16  |  2KB

  1. Received: from relay6.UU.NET (relay6.UU.NET [192.48.96.16]) by keeper.albany.net (8.7.1/8.7.1) with ESMTP id BAA06655 for <dwarner@albany.net>; Fri, 15 Dec 1995 01:54:39 -0500 (EST)
  2. Received: from garcia.com by relay6.UU.NET with SMTP 
  3.     id QQzuel27899; Fri, 15 Dec 1995 01:52:53 -0500 (EST)
  4. Received: from  (localhost) by garcia.com (5.x/SMI-SVR4)
  5.     id AA11299; Fri, 15 Dec 1995 01:53:14 -0500
  6. Date: Fri, 15 Dec 1995 01:53:14 -0500
  7. Errors-To: dwarner@albany.net
  8. Message-Id: <Pine.SUN.3.91.951215012802.656A-100000@access4.digex.net>
  9. Errors-To: dwarner@albany.net
  10. Reply-To: lightwave@garcia.com
  11. Originator: lightwave@garcia.com
  12. Sender: lightwave@garcia.com
  13. Precedence: bulk
  14. From: Ernie Wright <erniew@access.digex.net>
  15. To: Multiple recipients of list <lightwave@garcia.com>
  16. Subject: Re: LW SDK question: rotations
  17. X-Listprocessor-Version: 6.0c -- ListProcessor by Anastasios Kotsikonas
  18. Status: RO
  19. X-Status: 
  20.  
  21. Robert Lansdale wrote:
  22.  
  23. > I couldn't find the Lightwave SDK mailing list address (is there one?)
  24.  
  25. To subscribe, send mail to listserv@netcom.com and in the body of the
  26. message include the line "subscribe lwplugin-l".  If you want to sub-
  27. scribe an address other than the one you're mailing this from, you can
  28. add the address at the end of this line.
  29.  
  30. > ... does anyone have any code which will convert the heading/pitch/bank
  31. > rotation angles found in the LW scene file to a 4x4 rotation matrix? 
  32. > I'm currently using the Euler -> 4x4 matrix code found in Graphics Gems 
  33. > IV but it is not working ...
  34.  
  35. Ken Shoemake's development is quite a bit more general than you need
  36. for this, especially since, in the end, the code is for right-handed
  37. systems, and LW world coords are left-handed.  Try this:
  38.  
  39.    b[ 0 ][ 0 ] = b[ 1 ][ 1 ] = cos( bank );
  40.    b[ 0 ][ 1 ] = sin( bank );
  41.    b[ 1 ][ 0 ] = -b[ 0 ][ 1 ];
  42.  
  43.    p[ 1 ][ 1 ] = p[ 2 ][ 2 ] = cos( pitch );
  44.    p[ 1 ][ 2 ] = sin( pitch );
  45.    p[ 2 ][ 1 ] = -p[ 1 ][ 2 ];
  46.  
  47.    h[ 0 ][ 0 ] = h[ 2 ][ 2 ] = cos( heading );
  48.    h[ 2 ][ 0 ] = sin( heading );
  49.    h[ 0 ][ 2 ] = -h[ 2 ][ 0 ];
  50.  
  51.    multmat( m, b, m );
  52.    multmat( m, p, m );
  53.    multmat( m, h, m );     /* M = B P H */
  54.  
  55. In other words, post-multiply bank, then pitch, then heading, which are
  56. rotations about Z, X and Y respectively.  If you're using this for the
  57. camera, you might have to adjust the heading by pi/2 to make (0, 0, 0)
  58. point in the +Z direction (I can't remember exactly).
  59.  
  60. - Ernie
  61.